﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BuildHelper.Setup.ProcedurySql
{
    public static class ProceduryTools
    {
        private static string ProcMask = @"\s*PROCEDURE\s*(\w*)\s*\((.*?)\)\s*IS\s*";
        private static string ParamsMask = @"\s*(\w*)\s+(\w*)\s*(DEFAULT\s+([^,]*))?,?";

        public static bool ReadProc(string file, ProceduryDataSet ds)
        {
            bool res = false;
            try
            {
                string f = file.ReadFile();
                var func = f.GetFirstMatch(ProcMask, new int[] { 1, 2 }, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Singleline);
                if (func != null)
                {
                    var parameters = func[2].GetMatches(ParamsMask, new int[] { 1, 2, 4 }, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Singleline);
                    ProceduryDataSet.STP_SQL_FUNCRow fRow = null;
                    bool add = false;
                    if (ds.STP_SQL_FUNC.Rows.Count > 0)
                    {
                        fRow = ds.STP_SQL_FUNC[0];
                    }
                    else
                    {
                        fRow = ds.STP_SQL_FUNC.NewSTP_SQL_FUNCRow();
                        add = true;
                    }

                    fRow.STP_SQLF_NAZWA = func[1];
                    fRow.STP_SQLF_PLIK = GlobalTools.GetBranczPath(file);
                    fRow.STP_SQLF_NAZWA_SQL = func[1];

                    if (add)
                        ds.STP_SQL_FUNC.Rows.Add(fRow);

                    int i=0;
                    ds.STP_SQL_FUNC_PARAMS.DeleteRows();

                    foreach (var p in parameters)
                    {
                        var nr = ds.STP_SQL_FUNC_PARAMS.NewSTP_SQL_FUNC_PARAMSRow();
                        nr.STP_SQL_FUNCRow = fRow;
                        if (p[4].IsNotNull())
                            nr.STP_SQLFP_DEFAULT = p[4];
                        nr.STP_SQLFP_NAZWA = p[1];
                        nr.STP_SQLFP_POZYCJA = i++;
                        nr.STP_SQLFP_TYP = p[2];
                        ds.STP_SQL_FUNC_PARAMS.Rows.Add(nr);
                    }
                    res = true;
                }
            }
            catch { }
            return res;
        }
    }
}
